Hippo4j 原理简单解读 您所在的位置:网站首页 blastbufferqueue 原理解读 Hippo4j 原理简单解读

Hippo4j 原理简单解读

2023-07-13 00:37| 来源: 网络整理| 查看: 265

前言:

       对于java系统性能调优,大家的关注点很多都集中在jvm内存、cpu、连接等,只有一部分会关注到系统中真正干活的线程,这些线程好比一个公司的职员。公司各个部门的人员配比如何?以及这些人员是忙着呢,还是闲着呢?

       对于流量较大或者任务型的系统,必须确保线程有合适的配比。Hippo4j就是解决这样问题的平台。

原理篇 1)线程池

       线程池化是目前线程管理事实上的标准,Hippo4j管理线程事实上是管理不同的线程池。

线程池能被管理吗?或者说线程池能被监控、统计以及动态调整吗?答案是肯定的。

下面罗列ThreadPoolExecutor类部分api:

核心线程

setCorePoolSizegetCorePoolSize

最大线程

setMaximumPoolSizegetMaximumPoolSize

阻塞队列

getQueue

存活的线程

getActiveCount

获取线程堆栈信息

ThreadPoolExecuto.workers 2)如何获取到这些线程呢?

       Hippo4j是基于spring框架开发的。不同的第三方组件依赖线程池的方式不同,Hippo4j需要做的就是在项目启动的过程中,挨个适配捕获不同组件依赖的线程池。然后将他们注册到服务端进行管理起来。下面我们看一个

解释:

     ApplicationStartedEvent是spring2.0的消息,也就是如果要对接hippo4j 1.5那么就需要依赖spring boot2.0,此消息是spring 容器已经刷新完毕但是业务流量还没进来。

      由于spring 容器已经刷新完毕,因此可以通过spring容器获取已经实例化后的目标类

ApplicationContextHolder.getBeansOfType(DefaultRocketMQListenerContainer.class)

     然后通过反射ReflectUtil就可以获得到线程池了,进而就可以组件依赖的控制线程了。

3)Hippo4j 客户端如何与服务端交互?

Hippo4j客户端与服务通信,参考nacos实现的长轮询。

 轮询

是指不管服务端数据有无更新,客户端每隔定长时间请求拉取一次数据,可能有更新数据返回,也可能什么都没有。

长轮询

客户端发起长轮询,如果服务端的数据没有发生变更,会 hold 住请求,直到服务端的数据发生变化,或者等待一定时间超时才会返回。返回后,客户端又会立即再次发起下一次长轮询。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有